/*
快慢指针：同向移动
 给定一个长度为n的整数序列，找出最长的，不包含重复数字的，连续子串
  1,2,2,2,3,4   res = 2,3,4

  1,2,3,4,5,7,6,7,8,9,10,11   （5）  （6）=> 取 6,7,8,9,10,11

  思路：
   res 保存最长串的长度+串本身
   ret 保存当前串长+串本身
   i,j => i~j全是连续不重复子串。
      一旦j使得序列不连续/重复了=> 记录到ret中[i,j-1]，和res比较。如果更好，res = ret
      同时令i = j  重新进行下一个合法的查找

      循环条件:
      1.j没到末端
      2.i<j
      3.剩余长度<res长度（优化）
      判优条件:
      ret better than res ?
*/
#include <bits/stdc++.h>
using namespace std;
class Result {
public:
    int len;
    int str[5000];
    Result() :len(0) {}
};
int n;
int target[500];
Result res, ret;
bool check(int fast) {
    return (target[fast] - target[fast - 1] == 1) ? true : false;
    //如果连续，len++,否则 先存 low~fast-1 然后记录len
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> target[i];
    cout << "input string:" << endl;
    for (int i = 1; i <= n; i++) {
        cout << target[i] << " ";
    }cout << endl;

    int low = 1;
    int fast = low + 1;
    res.len = 0;
    ret.len = 0; //仅当ret.len > res.len方可
    for (; fast <= n && fast >= low; fast++) {
        if (check(fast) == true) {
            ret.len = fast - low + 1;// 1 2 3 4 5 7 6 7 8 9 10 11
        }
        else {
            if (ret.len > res.len) {
                res.len = ret.len;
                for (int i = 0; i < ret.len; i++) {
                    res.str[i] = target[low + i]; //拷贝
                }
            }
            ret.len = 0;
            low = fast;
            continue;
        }
    }
    if (ret.len > res.len) {
        res.len = ret.len;
        for (int i = 0; i < ret.len; i++) {
            res.str[i] = target[low + i]; //拷贝
        }
    }

  
    cout << "consecutive longest string len:" << res.len << "   \nstring:" << endl;
    for (int i = 0; i < res.len; i++) {
        cout << res.str[i] << " ";
    }cout << endl;

    return 0;
}